package com.sparrow.common.util;

import java.util.*;

/**
 * 集合工具类
 */
public class CollectionUtil {

    /**
     * 判断一个集合是否为空。
     * 如果集合为 null 或者集合中没有元素，则认为集合为空。
     *
     * @param collection 待判断的集合
     * @return 如果集合为空返回 true，否则返回 false
     */
    public static boolean isEmpty(Collection<?> collection) {
        return collection == null || collection.isEmpty();
    }

    /**
     * 判断一个集合是否非空。
     * 如果集合不为 null 并且集合中有元素，则认为集合非空。
     *
     * @param collection 待判断的集合
     * @return 如果集合非空返回 true，否则返回 false
     */
    public static boolean isNotEmpty(Collection<?> collection) {
        return!isEmpty(collection);
    }

    /**
     * 判断一个映射是否为空。
     * 如果映射为 null 或者映射中没有键值对，则认为映射为空。
     *
     * @param map 待判断的映射
     * @return 如果映射为空返回 true，否则返回 false
     */
    public static boolean isEmpty(Map<?, ?> map) {
        return map == null || map.isEmpty();
    }

    /**
     * 判断一个映射是否非空。
     * 如果映射不为 null 并且映射中有键值对，则认为映射非空。
     *
     * @param map 待判断的映射
     * @return 如果映射非空返回 true，否则返回 false
     */
    public static boolean isNotEmpty(Map<?, ?> map) {
        return!isEmpty(map);
    }

    /**
     * 判断一个数组是否为空。
     * 如果数组为 null 或者数组的长度为 0，则认为数组为空。
     *
     * @param array 待判断的数组
     * @return 如果数组为空返回 true，否则返回 false
     */
    public static boolean isEmpty(Object[] array) {
        return array == null || array.length == 0;
    }

    /**
     * 判断一个数组是否非空。
     * 如果数组不为 null 并且数组的长度大于 0，则认为数组非空。
     *
     * @param array 待判断的数组
     * @return 如果数组非空返回 true，否则返回 false
     */
    public static boolean isNotEmpty(Object[] array) {
        return!isEmpty(array);
    }

    /**
     * 判断一个可迭代对象是否为空。
     * 如果可迭代对象为 null 或者没有元素，则认为可迭代对象为空。
     *
     * @param iterable 待判断的可迭代对象
     * @return 如果可迭代对象为空返回 true，否则返回 false
     */
    public static boolean isEmpty(Iterable<?> iterable) {
        if (iterable == null) {
            return true;
        }
        Iterator<?> iterator = iterable.iterator();
        return!iterator.hasNext();
    }

    /**
     * 判断一个可迭代对象是否非空。
     * 如果可迭代对象不为 null 并且有元素，则认为可迭代对象非空。
     *
     * @param iterable 待判断的可迭代对象
     * @return 如果可迭代对象非空返回 true，否则返回 false
     */
    public static boolean isNotEmpty(Iterable<?> iterable) {
        return!isEmpty(iterable);
    }

    public static Set<String> toStringSet(String str) {
        Set<String> results = new HashSet<>();
        if (str == null || str.length() == 0) {
            return results;
        }
        String[] split = str.split(",");
        for (int i = 0; i < split.length; i++) {
            String s = split[i];
            results.add(s);
        }
        return results;
    }
}